package it.azienda.stampe.controllo;

import it.azienda.framework.controllo.AzioneBase;
import it.azienda.framework.utilita.Utilita;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.myfaces.custom.navmenu.jscookmenu.HtmlCommandJSCookMenu;

/**
 *
 * @author MCignarale
 */
public class AzioneAnalizzaStampe extends AzioneBase implements Serializable {
    
    ArrayList listaParametri =new ArrayList();
    
    public void esegui(ActionEvent ae) {
        
        String nomeStampa = "";
        String pkg="it.azienda.stampe.parametri.BeanStampa";
        
        if (ae.getComponent() instanceof HtmlCommandJSCookMenu) {
            String parametri = (String)((HtmlCommandJSCookMenu) ae.getComponent()).getValue();
            listaParametri = scansioneParametri(parametri);
            nomeStampa=(String)listaParametri.get(0);
        }else{
            nomeStampa = (String) Utilita.getRequest().getAttribute("nomeBean");
        }
        
        Class class1=null;
        Method method=null;
        Object obj = null;
        pulisci();
        try{
            class1 = Class.forName(pkg+nomeStampa);
            obj=class1.newInstance();
            method=class1.getMethod("setNomeStampa", new Class[]{java.lang.String.class});
            method.invoke(obj, new Object[]{nomeStampa});
            method=class1.getMethod("setTipoReport", new Class[]{java.lang.Integer.class});
            method.invoke(obj, new Object[]{new Integer(0)});
            method=class1.getMethod("setTipoStampa", new Class[]{java.lang.Integer.class});
            method.invoke(obj, new Object[]{new Integer(0)});
            method=class1.getMethod("setTipoSalvataggio", new Class[]{java.lang.Integer.class});
            method.invoke(obj, new Object[]{new Integer(0)});
            FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("beanStampa"+nomeStampa,obj);
        }catch(Exception e){
            
        }
        
        String url2 = "/stampa"+nomeStampa+".jsf";
        FacesContext ctx = FacesContext.getCurrentInstance();
        UIViewRoot view = ctx.getApplication().getViewHandler().createView(ctx,url2);
        view.setViewId(url2);
        ctx.setViewRoot(view);
        ctx.renderResponse();
    }
    
    private ArrayList scansioneParametri(String parametri) {
        StringTokenizer tokenizer = new StringTokenizer(parametri,"|");
        ArrayList lista = new ArrayList();
        ArrayList lista1 = new ArrayList();
        while (tokenizer.hasMoreTokens()) {
            lista.add(tokenizer.nextToken());
        }
        return lista;
    }
    
    public void stampaDiretta(ActionEvent ae) {
        
        String nomeStampa = "";
        String pkg="it.azienda.stampe.parametri.BeanStampa";
        
        if (ae.getComponent() instanceof HtmlCommandJSCookMenu) {
            String parametri = (String)((HtmlCommandJSCookMenu) ae.getComponent()).getValue();
            listaParametri = scansioneParametri(parametri);
            nomeStampa=(String)listaParametri.get(0);
        }else{
            nomeStampa = (String) Utilita.getRequest().getAttribute("nomeBean");
        }
        Class class1=null;
        Method method=null;
        Object obj = null;
        
        try{
            class1 = Class.forName(pkg+nomeStampa);
            obj=class1.newInstance();
        }catch(Exception e){
            
        }
    }
    
    public void pulisci(){
        HttpSession sessione = (HttpSession)Utilita.getSession();
        HttpServletRequest richiesta =(HttpServletRequest)Utilita.getRequest();
        
        sessione.removeAttribute("form");
        sessione.removeAttribute("posizioneOggetto");
        sessione.removeAttribute("beanFind");
    }
}